# Django快捷工具函数
from django.shortcuts import render, redirect, get_object_or_404
# URL反向解析
from django.urls import reverse
# 当前应用的模型
from .models import Task
# 当前应用的表单
from .forms import TaskForm


# Create a task
def task_create(request):
    # 如果用户通过POST提交，通过request.POST获取提交数据
    if request.method == "POST":
        # 将用户提交数据与TaskForm表单绑定
        form = TaskForm(request.POST)
        # 表单验证，如果表单有效，将数据存入数据库
        if form.is_valid():
            form.save()
            # 跳转到任务清单
            return redirect(reverse("tasks:task_list"))
    else:
        # 否则空表单
        form = TaskForm()
    return render(request, "tasks/task_form.html", {"form": form, })

# Retrieve task list
def task_list(request):
    # 从数据库获取任务清单
    tasks = Task.objects.all()
    # 指定渲染模板并传递数据
    return render(request, "tasks/task_list.html", {"tasks": tasks, })

# Retrieve a single task
def task_detail(request, pk):
    # 从url里获取单个任务的pk值，然后查询数据库获得单个对象
    task = get_object_or_404(Task, pk=pk)
    return render(request, "tasks/task_detail.html", {"task": task, })

# Update a single task
def task_update(request, pk):
    # 从url里获取单个任务的pk值，然后查询数据库获得单个对象实例
    task_obj = get_object_or_404(Task, pk=pk)
    if request.method == 'POST':
        # 创建绑定表单（同时绑定实例）
        form = TaskForm(instance=task_obj, data=request.POST)
        if form.is_valid():
            # 更新数据库记录
            form.save()
            # 重定向到详情页（携带pk参数）
            return redirect(reverse("tasks:task_detail", args=[pk, ]))
    else:
        # 创建带初始数据的表单
        form = TaskForm(instance=task_obj)
    return render(request, "tasks/task_form.html", {"form": form, "object": task_obj})

# Delete a single task
def task_delete(request, pk):
    # 从url里获取单个任务的pk值，然后查询数据库获得单个对象
    task_obj = get_object_or_404(Task, pk=pk)
    task_obj.delete()  # 删除然后跳转
    return redirect(reverse("tasks:task_list"))